<?php
namespace ImiDemo\HttpDemo\MainServer\Controller;

use Imi\Task\TaskInfo;
use Imi\Task\TaskParam;
use Imi\Task\TaskManager;
use Imi\Controller\HttpController;
use Imi\Server\View\Annotation\View;
use Imi\Server\Route\Annotation\Route;
use Imi\Server\Route\Annotation\Action;
use Imi\Server\Route\Annotation\Controller;
use ImiDemo\HttpDemo\MainServer\Task\TestTask;

/**
 * 后台任务 演示
 * @Controller("/Task/")
 * @View(renderType="json")
 */
class TaskController extends HttpController
{
    /**
     * 后台任务 演示直接投递
     * 访问后请看控制台输出，可以访问多次，后台会在多个task进程中执行
     * 访问：http://127.0.0.1:8080/Task/test
     * 
     * @Action
     * @return void
     */
    public function test()
    {
        TaskManager::post(new TaskInfo(
            // 上面定义的类的实例
            new TestTask,
            // 执行任务的参数，构造方法可以接收一个数组
            new TaskParam([
                'time'    =>    time(),
            ])
        ));
        return [
            'success'    =>    true,
        ];
    }

    /**
     * 后台任务 演示任务名称投递
     * 访问后请看控制台输出，可以访问多次，后台会在多个task进程中执行
     * 访问：http://127.0.0.1:8080/Task/testName
     * 
     * @Action
     * @return void
     */
    public function testName()
    {
        TaskManager::nPost('testTask', [
            'time'    =>    time(),
        ]);
        return [
            'success'    =>    true,
        ];
    }
}